package kingpengcom.demoopengl.demoopengl.hello_world;

import android.opengl.GLES20;
import android.opengl.GLSurfaceView;

import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;

/**
 * @author kingpengLin
 * @e-mail linjinpeng@vsoontech.com
 * @since 2018/10/18.
 */
public class MyOpenGLRenderer implements GLSurfaceView.Renderer {

    private final IOpenGLDemo openGLDemo;

    public MyOpenGLRenderer(IOpenGLDemo openGLDemo) {
        this.openGLDemo = openGLDemo;
    }

    //OpenGL ES 2.0接口，为什么这些方法会有一个GL10的参数。
    // 这是因为这些方法的签名（Method Signature）在2.0接口中被简单地重用了，
    // 以此来保持Android框架的代码尽量简单

    // Called when the surface is created or recreated.
    // 在这个方法中主要用来设置一些绘制时不常变化的参数，比如：背景色，是否打开 z-buffer等。
    @Override
    public void onSurfaceCreated(GL10 gl, EGLConfig eglConfig) {
        // Set the background frame color
        GLES20.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
    }

    // Called when the surface changed size.
    // 如果设备支持屏幕横向和纵向切换，这个方法将发生在横向<->纵向互换时。此时可以重新设置绘制的纵横比率。
    @Override
    public void onSurfaceChanged(GL10 gl, int width, int height) {
        GLES20.glViewport(0, 0, width, height);
    }

    // Called to draw the current frame.
    // 定义实际的绘图操作。
    @Override
    public void onDrawFrame(GL10 gl10) {
        if (openGLDemo != null) {
            openGLDemo.drawScene(gl10);
        }
    }
}
